/**
 * Lab_01.java
 * 50道100以内的加减法口算习题程序
 * 按照教材1.7节案例风格编写
 */

import java.util.Random;
import java.util.Scanner;

public class Lab_01 {

    // 定义常量
    private static final int TOTAL_QUESTIONS = 50;  // 总题数
    private static final int MAX_NUMBER = 100;      // 最大数值

    public static void main(String[] args) {
        // 创建随机数对象
        Random random = new Random();

        // 创建输入对象
        Scanner scanner = new Scanner(System.in);

        // 程序开始
        System.out.println("******************************");
        System.out.println("   100以内加减法口算习题");
        System.out.println("******************************");
        System.out.println();

        // 显示题目
        displayQuestions(random);

        System.out.println();
        System.out.println("******************************");
        System.out.println("习题生成完毕！共" + TOTAL_QUESTIONS + "道题。");
        System.out.println("******************************");

        // 关闭输入流
        scanner.close();
    }

    /**
     * 显示所有题目
     * @param random 随机数对象
     */
    public static void displayQuestions(Random random) {
        int questionNumber = 1;

        for (int i = 0; i < TOTAL_QUESTIONS; i++) {
            // 生成题目
            String question = generateQuestion(random, questionNumber);

            // 输出题目
            System.out.print(question);

            questionNumber++;

            // 每5道题换一行
            if (questionNumber % 5 == 1) {
                System.out.println();
            }
        }
    }

    /**
     * 生成一道题目
     * @param random 随机数对象
     * @param number 题号
     * @return 格式化后的题目字符串
     */
    public static String generateQuestion(Random random, int number) {
        // 生成两个操作数
        int num1 = random.nextInt(MAX_NUMBER + 1);
        int num2 = random.nextInt(MAX_NUMBER + 1);

        // 随机选择运算符（true为加法，false为减法）
        boolean isAddition = random.nextBoolean();
        String operator;
        int result;

        if (isAddition) {
            operator = "+";
            // 确保加法结果不超过100
            while (num1 + num2 > MAX_NUMBER) {
                num1 = random.nextInt(MAX_NUMBER + 1);
                num2 = random.nextInt(MAX_NUMBER + 1);
            }
            result = num1 + num2;
        } else {
            operator = "-";
            // 确保减法结果不为负数
            if (num1 < num2) {
                // 交换两个数
                int temp = num1;
                num1 = num2;
                num2 = temp;
            }
            result = num1 - num2;
        }

        // 格式化题目
        return String.format("%2d. %2d %s %2d =    ", number, num1, operator, num2);
    }
}